iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0
Cloud Native

【하나, 둘, ready, get set, go】系列 第 15

【하나, 둘, ready, get set, go】Day 15 - goroutines

  • 分享至 

  • xImage
  •  

前情提要

Goroutines 是一個由 Go runtime 管理的輕量化線程,是 Go 用來實現 Concurrency (並發) 的方式

其中設計了 channels、sync 機制

今天就來簡單實作一下 Goroutines~

channels、sync 機制後面幾天再來介紹

實際操作

語法

go func function_名稱()

Example

go func say()

下面就用 A Tour of Go 上的官方範例來做講解

package main

import (
    "fmt"
    "time"
)

func say(s string) {
    for i := 0; i < 5; i++ {
        time.Sleep(100 * time.Millisecond)
        fmt.Println(s)
    }
}

func main() {
    go say("world")
    say("hello")
}

我們可以先將 Line 10 的 time.Sleep(100 * time.Millisecond) 進行註解,看看會發生什麼事情

結果就是「world」字眼出現的機率大幅下降,變成幾乎不會出現

這是為什麼呢?是因為當 go say("world") 被執行時,系統會將其放到其他線程內 (main 自己本身也是一個 goroutine),然後繼續往下執行 say("hello"),並沒有等待,然後 main 就執行結束了

我們這時候可以將 Line 10 取消註解,看一下會發生什麼事情~

結果就是「world」出現了~(每次執行結果都會不一樣)

這是爲什麼呢?是因為當執行到 say("hello") 時,遇到了 time.Sleep(100 * time.Millisecond),讓當前 CPU 有了空閒時間,就有時間去執行被放到其他線程內的 go say("world")

總結

今天簡單介紹了 Go 的 Goroutines 用法

後面幾天會來介紹 channels、sync 等 Goroutines 機制

我們明天見~


上一篇
【하나, 둘, ready, get set, go】Day 14 - generic
下一篇
【하나, 둘, ready, get set, go】Day 16 - channels
系列文
【하나, 둘, ready, get set, go】30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言